export default function http(options) {
    return new Promise((resolve, reject) => {
        // 获取token
        const token = uni.getStorageSync('token') || 'test-token'

        if (options.needLogin && !token) {
            // 提示用户登录
            uni.showToast({
                title: '请先登录！',
                icon: 'none',
            })
            // 重定向到登录页面
            setTimeout(() => {
                uni.redirectTo({ url: '/pages/login/index' })
            },1500)
            return 
        }

        // 基地址
        const baseURL = "http://localhost:3000"

        // 请求地址
        const url = baseURL + options.url

        // 请求头
        const header = {
            token,
            withCredentials: true
        }
        
        // 显示加载
        let  showLoading = false
        if  (options.loading) {
            showLoading = true
            uni.showLoading({
                title: '加载中...',
                mask: true
            })
        }

        // 发送请求
        uni.request({
            url,
            method: options.method || 'GET',
            timeout: options.timeout || 20000,
            header,
            data: options.data || {},
            success: (res) => {
                res = res.data
                switch(res.code) {
                  // 请求没问题
                  case 0:
                    return resolve(res)
                  // 异常信息
                  case -1:
                    uni.showToast({
                      title: res.msg,
                      icon: 'none'
                    })
                    break;
                  // 登录已失效，需要重新登录
                  case 403:
                    uni.showToast({
                      title: '登录已失效，请重新登录',
                      icon: 'none'
                    })
                    setTimeout(() => {
                      uni.redirectTo({
                        url: '/pages/login/index',
                      })
                    }, 1000);
                    break;
                  // 其他异常
                  default:
                    uni.showToast({
                      title: '服务开小差5254r啦！',
                      icon: 'none'
                    })
                    break
                }
            },
            fail: (err) => {
                uni.showToast({
                    title: '服务开小差啦！',
                    icon: 'none'
                  })
            },
            complete: (res) => {
                if (showLoading) {
                    uni.hideLoading()
                }
            }
        })
     })
}